package lhd.mybatis_simple_log.utils;

import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.parser.ParserException;
import org.apache.commons.lang3.StringUtils;

/**
 * 格式化sql工具类
 *
 * @author lhd
 * @since 2025/6/10 17:53
 */
public class SqlFormatterUtil {

    /**
     * 格式化sql
     *
     * @param sql sql语句
     * @return 格式化后的sql
     */
    public static String formatSql(String sql) {
        if (StringUtils.isEmpty(sql)) {
            return sql;
        }

        String parseSql = null;
        if ((parseSql = formatSql(sql, DbType.mysql)) != null) {
            return parseSql;
        }

        if ((parseSql = formatSql(sql, DbType.postgresql))!= null) {
            return parseSql;
        }

        if ((parseSql = formatSql(sql, DbType.oracle))!= null) {
            return parseSql;
        }

        if ((parseSql = formatSql(sql, DbType.sqlserver))!= null) {
            return parseSql;
        }

        if ((parseSql = formatSql(sql, DbType.dm))!= null) {
            return parseSql;
        }

        if ((parseSql = formatSql(sql, DbType.other))!= null) {
            return parseSql;
        }

        return sql;
    }


    public static String formatSql(String sql, DbType dbType) {
        try {
            return SQLUtils.format(sql, dbType, SQLUtils.DEFAULT_FORMAT_OPTION);
        } catch (ParserException e) {
            return null;
        }
    }
}